home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / ver / 014 / ippon014.lzh / FuncEnemy / zakoa.c next >
C/C++ Source or Header  |  2000-07-07  |  2KB  |  97 lines

  1. /* zakoa.c */
  2.  
  3. #include <xsp2lib.h>
  4.  
  5. #include "../main.h"
  6. #include "../player.h"
  7. #include "../enemy.h"
  8. #include "../eshot.h"
  9. #include "../effect.h"
  10. #include "../psearch.h"
  11.  
  12.  
  13. /* 関数プロトタイプ宣言 */
  14. static short EnemyMoveZakoB (ENEMY *);
  15. static void EnemyFreeZakoB (ENEMY *);
  16.  
  17.  
  18. /* 初期化ルーチン */
  19. void EnemyAllocZakoB (ENEMY * p)
  20. {
  21.     p->pt = obj_zako02;
  22.     p->info = 0x0800 | PRIORITY_ZAKO;    /* 数値を決めうちして入れるのはよくない */
  23.     p->hit_sx = 12;        /* 自機ショットに対する当たり判定 */
  24.     p->hit_sy = 12;
  25.     p->hp = 2;        /* 耐久力 */
  26.     p->damage = 0;
  27.     p->func_enemy_move = EnemyMoveZakoB;
  28.     p->func_enemy_free = EnemyFreeZakoB;
  29.  
  30.     p->s_work = 0;        /* ショット用ワークを初期化 */
  31.  
  32.     /* コア関連 */
  33.     p->core_info = PALET_CORE_BLUE | PRIORITY_ZAKO;
  34.     p->core_pt = sp_core + 1;
  35. }
  36.  
  37.  
  38.  
  39. /* 移動ルーチン */
  40. /* 返り値:非0なら消去 */
  41. static short EnemyMoveZakoB (ENEMY * p)
  42. {
  43.     /* 敵をくるくる回すアニメーション */
  44.     p->pt++;
  45.     if (p->pt > obj_zako02 + 15)
  46.         p->pt = obj_zako02;
  47.  
  48.  
  49.     /* X座標を自機に近づける */
  50.     if (p->lx > player->lx)
  51.         p->lx -= 32768;
  52.     else
  53.         p->lx += 32768;
  54.  
  55.     p->ly += 2 * 65536;
  56.  
  57.     /* 上位ワード(固定整数部)だけ取り出す */
  58.     p->x = p->lx >> 16;
  59.     p->y = p->ly >> 16;
  60.  
  61.     /* 弾を撃つ処理(30フレームに1回発射) */
  62.     if (p->s_work++ > 30) {
  63.         char angle;
  64.         p->s_work = 0;
  65.         angle = psearch (p->x, p->y);    /* 敵から見た自機の方向を unsigned char で返す */
  66.         EshotAlloc (0, p->x, p->y, 10, angle);    /* 弾を撃つ */
  67.     }
  68.     if (p->y > 256 + 32)
  69.         return (-1);    /* Y座標が 256+32 以上なら消去 */
  70.  
  71.     /* もし前回ダメージを受けたなら */
  72.     if (p->damage) {
  73.         p->hp -= p->damage;
  74.         p->damage = 0;
  75.         /* 耐久力が0以下なら消去 */
  76.         if (p->hp <= 0) {
  77.             EffectAlloc (EFFECT_EXPLZAKO, 0, p->x, p->y);    /* 爆発パターンを出現させる */
  78.             return (-1);
  79.         }
  80.     }
  81.     xobj_set_st (p);    /* 表示 */
  82.  
  83.     /* コアの表示 */
  84.     p->core_x = p->x - 8;
  85.     p->core_y = p->y - 8;
  86.     xsp_set_st (&(p->core_x));
  87.  
  88.     return (0);
  89. }
  90.  
  91.  
  92. /* 消去ルーチン */
  93. static void EnemyFreeZakoB (ENEMY * p)
  94. {
  95. }
  96.  
  97.